package day16;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Demo04 {
	public static void main(String[] args) {
		test06();
	}

	private static void test06() {
		// 练习
		// 找出从2000年到2500年之间所有
		// 既是13号, 又是星期五的日子

	}

	private static void test05() {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Calendar c = Calendar.getInstance();
		// 用日历对象进行日期的计算
		// 第一个参数: 要进行计算的属性
		// 第二个参数: 计算值, 正数表示加, 负数表示减
		c.add(Calendar.YEAR, 2);
		System.out.println(df.format(c.getTime()));

		c.add(Calendar.MONTH, 11);
		System.out.println(df.format(c.getTime()));

		c.add(Calendar.DAY_OF_MONTH, -5);
		System.out.println(df.format(c.getTime()));
	}

	private static void test04() {
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		Calendar c = Calendar.getInstance();
		// 设置日历属性值
		// 1. 按照指定属性设置
		c.set(Calendar.YEAR, 2019);
		System.out.println(df.format(c.getTime()));

		// 2. 一次设置多个属性
		// 对年月日进行设置
		c.set(2020, Calendar.NOVEMBER, 20);
		System.out.println(df.format(c.getTime()));

		// 对年月日时分秒设置
		c.set(2020, Calendar.FEBRUARY, 31, 13, 42, 55);
		System.out.println(df.format(c.getTime()));

		// 即使设置的数据不符合现实, 日历类会自动推算正确的日期
		c.set(2020, 13, 31, 13, 42, 55);
		System.out.println(df.format(c.getTime()));
	}

	private static void test03() {
		Calendar c = Calendar.getInstance();

		// 获取属性
		int year = c.get(Calendar.YEAR);
		System.out.println(year);

		int month = c.get(Calendar.MONTH);
		System.out.println(month);

		// 判断日历所表示的时间是否是星期五
		System.out.println(c.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY);

	}

	private static void test02() {
		Calendar c = Calendar.getInstance();
		System.out.println(c);
		/*
		java.util.GregorianCalendar[
		time=1583225250456,
		areFieldsSet=true,
		areAllFieldsSet=true,
		lenient=true,
		zone=sun.util.calendar.ZoneInfo[
		id="Asia/Shanghai",
		offset=28800000,
		dstSavings=0,
		useDaylight=false,
		transitions=19,
		lastRule=null
		],
		firstDayOfWeek=1,
		minimalDaysInFirstWeek=1,
		ERA=1,
		YEAR=2020,
		MONTH=2,
		WEEK_OF_YEAR=10,
		WEEK_OF_MONTH=1,
		DAY_OF_MONTH=3,
		DAY_OF_YEAR=63,
		DAY_OF_WEEK=3,
		DAY_OF_WEEK_IN_MONTH=1,
		AM_PM=1,
		HOUR=4,
		HOUR_OF_DAY=16,
		MINUTE=47,
		SECOND=30,
		MILLISECOND=456,
		ZONE_OFFSET=28800000,
		DST_OFFSET=0
		]
		*/

		// 对日历对象进行格式化
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// 日历对象中提供了方法获取对应的日期对象
		// Date d = c.getTime();
		String str = df.format(c.getTime());
		// 对应的将日期对象设置到日历中
		try {
			String str2 = "2020-02-20 13:23:50";
			Date d = df.parse(str2);
			c.setTime(d);
		} catch (ParseException e) {
			e.printStackTrace();
		}

	}

	private static void test01() {
		// java.util.Date
		Date d = new Date();
		//		System.out.println(d);

		// 获取日期对象的毫秒值
		//		System.out.println(d.getTime());

		// 设置日期对象的毫秒值
		//		d.setTime(1583222000000L);
		//		System.out.println(d);

		// 希望以`2020-03-03 16:04:41`格式输入日期
		// 要对日期对象进行格式化操作
		// 日期格式化对象, 创建该对象时, 指定日期的格式化模式
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		// 用日期格式化对象, 对日期对象进行格式化, 得到想要的字符串
		String str = df.format(d);
		System.out.println(str);

		String str2 = "2020-02-20 13:23:50";
		// 将日期内容的字符串转换为Date对象
		try {
			Date d2 = df.parse(str2);
			System.out.println(d2);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}
}
